#ifndef RACE_H
#define RACE_H

#include <iostream>
#include <vector>
#include "lib.h"
using namespace std;

/**
 * La classe Race représente une race au sens AD&D. C'est une classe
 * abstraite, qui sert au polymorphisme.
 * @author Johan "Solo" Luisier
 */
class Race
{
 protected:
  /**
   * Capacités raciales
   */
  vector<unsigned int> capacites;
  /**
   * Niveau de sortie des fonctions globales
   * @see DebugLevelType
   * @see debugstream 
   */
  static DebugLevelType elementaire;
  /**
   * Niveau de sortie des fonctions plus spécifiques
   * @see DebugLevelType
   * @see debugstream 
   */
  static DebugLevelType fonction;
  /**
   * Nom de la Race (Elfe, Gnome, Humain, ...)
   */
  string Type;
 public:
  Race(const string& type);
  Race(const Race& race);
  virtual ~Race();
  /**
   * Applique les ajustements raciaux aux traits passé en arguments.
   * @param tab trait du personnage
   */
  virtual void appliquer_ajustements(unsigned int tab[6]) = 0;
  /**
   * Affiche les capacités raciales.
   */
  virtual void affiche_info() = 0;
  string get_Type() const;
  unsigned int get_taille() const;
  unsigned int get_capa(const unsigned int& i) const;
  /**
   * Retrouve la capacité raciale désirée.
   * @param i numéro de la capacité
   * @return la capacité
   */
  virtual string get_capacite(const unsigned int& i) const = 0;
  static void setLevel(const DebugLevelType& level, const unsigned int& n);
};


#endif
